var globalPartidas = new Array();
var globalGols = new Array();
var globalClubes = new Array();
var globalEstadios = new Array();
var globalJogadores = new Array();
var globalCartoes = new Array();
var globalSubstituicoes = new Array();
var globalGolsPerPartida = new Array();
var globalSubstituicoesPerPartida = new Array();
var globalCartoesPerPartida = new Array();

var globalTokenPartida = 0;
var globalTokenExtraInfo = 0;
var globalTargetObject = 'partida'; //Modifique aqui com o nome da tabela referente a página. uf, jogador etc

//Faz as tarefas antes da solicitação
function makeEarlyTasks(){
    
}

function makeLateTasks(){
    changeDatetimeCombos();
}

function createChampionship(){
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('call', 'criaCampeonato');
    globalCommunicator.sendRequest(requestListDefault);
}

function requestListDefault(){
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'clube');
    globalCommunicator.sendRequest(requestClubesHandler);
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'estadio');
    globalCommunicator.sendRequest(requestEstadioHandler);
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'jogador');
    globalCommunicator.sendRequest(requestJogadorHandler);
}

function verifyTokenPartida(){
    if(globalTokenPartida == 2){
        globalTokenPartida = 0;
        
        globalCommunicator.resetParameters();
        globalCommunicator.addParameter('listAll', globalTargetObject);
        globalCommunicator.addParameter('orderBy', 'rodada');
        globalCommunicator.sendRequest(createList);
    }
}

function requestClubesHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    for(var i = 0; i < responseObjLen; i++){
        var clube = new Clube(responseObj[i][0]);
        clube.assignProperties(responseObj[i][1], responseObj[i][2], responseObj[i][3], responseObj[i][4]);
        globalClubes[clube.getKey()] = clube;
    }
    
    globalTokenPartida++;
    verifyTokenPartida();
    
    createComboBox(globalClubes, null, 'time_casa_partida');
    createComboBox(globalClubes, null, 'time_visitante_partida');
}

function requestEstadioHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    for(var i = 0; i < responseObjLen; i++){
        var estadio = new Estadio(responseObj[i][0]);
        estadio.assignProperties(responseObj[i][1], responseObj[i][2]);
        globalEstadios[estadio.getKey()] = estadio;
    }
    
    globalTokenPartida++;
    verifyTokenPartida();
    
    createComboBox(globalEstadios, null, 'estadio_partida');
}

function requestJogadorHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    for(var i = 0; i < responseObjLen; i++){
        var jogador = new Jogador(responseObj[i][0]);
        jogador.assignProperties(responseObj[i][1], responseObj[i][2], responseObj[i][3], responseObj[i][4], responseObj[i][5]);
        globalJogadores[jogador.getKey()] = jogador;
    }
}

function createElementsObjects(respostaObj){
    var respostaObjLen = respostaObj.length;

    if(respostaObjLen > 0){
        var fragment = document.createDocumentFragment();

        for(var i = 0; i < respostaObjLen; i++){
            var partida = new Partida(respostaObj[i][0], respostaObj[i][1], respostaObj[i][2], respostaObj[i][3], respostaObj[i][4], respostaObj[i][5], respostaObj[i][6], respostaObj[i][7], respostaObj[i][8], respostaObj[i][9], respostaObj[i][10]);
            fragment.appendChild(partida.createItemList(partida));
            globalPartidas[partida.getKey()] = partida;
        }

        return fragment;
    }
    
    return null;
}

function placeNewChampionshipButton(){
    var button = document.createElement('DIV');
    button.className('new_championship');
    button.addEventListener('click', callNewChampionship, true);
}

function callNewChampionship(){
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('call', 'criaCampeonato');
    globalCommunicator.sendRequest(createList);
}

function getSelectedObject(key){
    return globalPartidas[key];
}

function clearRelatedBoxes(){
    //Não ponha nada aqui caso não hajam related boxes
    clearRelatedBoxList('gol_partida');
    clearRelatedBoxList('cartao_partida');
    clearRelatedBoxList('substituicao_partida');
    clearRelatedBoxList('relacionado_partida');
}

function newItemTasks(){
    document.getElementById('rodada_partida').removeAttribute('DISABLED');
}

function fillFields(obj){
    document.getElementById('rodada_partida').setAttribute('DISABLED', 'disabled');
    document.getElementById('rodada_partida').value = obj.rodada;
    selectComboItem(document.getElementById('time_casa_partida'), obj.id_clube_casa);
    selectComboItem(document.getElementById('time_visitante_partida'), obj.id_clube_visitante);
    selectComboItem(document.getElementById('estadio_partida'), obj.id_estadio);
    
    var dia, mes, hora, minuto;
    
    if(obj.hora_planejada == null){
        dia = mes = hora = minuto = '';
    }else{
        var horaPlanejada = obj.hora_planejada.split(' ');
        var horaPlanejadaDia = horaPlanejada[0].split('/');
        var horaPlanejadaHora = horaPlanejada[1].split(':');
        
        dia = horaPlanejadaDia[0];
        mes = horaPlanejadaDia[1];
        hora = horaPlanejadaHora[0];
        minuto = horaPlanejadaHora[1];
    }
    
    selectComboItem(document.getElementById('hora_planejada_dia_partida'), dia, true);
    selectComboItem(document.getElementById('hora_planejada_mes_partida'), mes, true);
    selectComboItem(document.getElementById('hora_planejada_hora_partida'), hora, true);
    selectComboItem(document.getElementById('hora_planejada_minuto_partida'), minuto, true);
    
    if(obj.hora_realizada == null){
        dia = mes = hora = minuto = '';
    }else{
        var horaRealizada = obj.hora_realizada.split(' ');
        var horaRealizadaDia = horaRealizada[0].split('/');
        var horaRealizadaHora = horaRealizada[1].split(':');
        
        dia = horaRealizadaDia[0];
        mes = horaRealizadaDia[1];
        hora = horaRealizadaHora[0];
        minuto = horaRealizadaHora[1];
    }
    
    selectComboItem(document.getElementById('hora_realizada_dia_partida'), dia);
    selectComboItem(document.getElementById('hora_realizada_mes_partida'), mes);
    selectComboItem(document.getElementById('hora_realizada_hora_partida'), hora);
    selectComboItem(document.getElementById('hora_realizada_minuto_partida'), minuto);    
    
    var publicoPagante = document.getElementById('publico_pagante_partida');
    resolveNullField(obj.publico_pagante, publicoPagante, 'Não definido');
    
    var rendaTotal = document.getElementById('renda_total_partida');
    resolveNullField(obj.renda_total, rendaTotal, 'Não definido');
    
    var duracaoTempo1 = document.getElementById('duracao_tempo1_partida');
    var duracaoTempo2 = document.getElementById('duracao_tempo2_partida');
    resolveNullField(obj.duracao_t1, duracaoTempo1, 'Não definido');
    resolveNullField(obj.duracao_t2, duracaoTempo2, 'Não definido');
    
    requestExtraInfo();
    
    //preloaderAnimation();
}

function requestExtraInfo(){
    clearRelatedBoxes();
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'gol');
    globalCommunicator.addParameter('condition', 'id_partida$$'+globalSelectedItem.id);
    globalCommunicator.sendRequest(requestGolsHandler);
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'cartao');
    globalCommunicator.addParameter('condition', 'id_partida$$'+globalSelectedItem.id);
    globalCommunicator.sendRequest(requestCartoesHandler);
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'substituicao');
    globalCommunicator.addParameter('condition', 'id_partida$$'+globalSelectedItem.id);
    globalCommunicator.sendRequest(requestSubstituicoesHandler);
    
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', 'jogador_relacionado_partida');
    globalCommunicator.addParameter('condition', 'id_partida$$'+globalSelectedItem.id);
    globalCommunicator.sendRequest(requestRelacionadosHandler);
}

function requestCartoesHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    globalCartoesPerPartida = new Array();
    var fragment = document.createDocumentFragment();
    
    for(var i = 0; i < responseObjLen; i++){
        var cartao = new Cartao(responseObj[i][0]);
        cartao.assignProperties(responseObj[i][1], responseObj[i][2], responseObj[i][3], responseObj[i][4], responseObj[i][5]);
        globalCartoes[cartao.getKey()] = cartao;
        cartao.addToRelated(globalCartoesPerPartida, 'partida_'+cartao.id_partida);
        
        fragment.appendChild(createRelatedBoxItemCartao(cartao));
    }
    
    var relatedBox = document.getElementById('cartao_partida');
    var list = relatedBox.getElementsByClassName('list')[0];
    list.appendChild(fragment);
}

function requestGolsHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    globalGolsPerPartida = new Array();
    var fragment = document.createDocumentFragment();
    
    for(var i = 0; i < responseObjLen; i++){
        var gol = new Gol(responseObj[i][0]);
        gol.assignProperties(responseObj[i][1], responseObj[i][2], responseObj[i][3], responseObj[i][4], responseObj[i][5]);
        globalGols[gol.getKey()] = gol;
        gol.addToRelated(globalGolsPerPartida, 'partida_'+gol.id_partida);
        
        fragment.appendChild(createRelatedBoxItemGol(gol));
    }
    
    var relatedBox = document.getElementById('gol_partida');
    var list = relatedBox.getElementsByClassName('list')[0];
    list.appendChild(fragment);
}

function requestSubstituicoesHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    globalSubstituicoesPerPartida = new Array();
    var fragment = document.createDocumentFragment();
    
    for(var i = 0; i < responseObjLen; i++){
        var substituicao = new Substituicao(responseObj[i][0]);
        substituicao.assignProperties(responseObj[i][1], responseObj[i][2], responseObj[i][3], responseObj[i][4], responseObj[i][5]);
        globalSubstituicoes[substituicao.getKey()] = substituicao;
        substituicao.addToRelated(globalSubstituicoesPerPartida, 'partida_'+substituicao.id_partida);
        
        fragment.appendChild(createRelatedBoxItemSubstituicao(substituicao));
    }
    
    var relatedBox = document.getElementById('substituicao_partida');
    var list = relatedBox.getElementsByClassName('list')[0];
    list.appendChild(fragment);
}

var globalRelacionadosPerPartida = new Array();
var globalRelacionados = new Array();

function requestRelacionadosHandler(response){
    var responseObj = eval(response);
    var responseObjLen = responseObj.length;
    
    globalRelacionadosPerPartida = new Array();
    var fragment = document.createDocumentFragment();
    
    for(var i = 0; i < responseObjLen; i++){
        var relacionado = new Relacionado(responseObj[i][0], responseObj[i][1]);
        relacionado.assignProperties(responseObj[i][2], responseObj[i][3]);
        globalRelacionados[relacionado.getKey()] = relacionado;
        relacionado.addToRelated(globalRelacionadosPerPartida, 'partida_'+relacionado.id_partida);
        
        fragment.appendChild(createRelatedBoxItemRelacionado(relacionado));
    }
    
    var relatedBox = document.getElementById('relacionado_partida');
    var list = relatedBox.getElementsByClassName('list')[0];
    list.appendChild(fragment);
}

function deleteItem(){
    if(globalSelectedItem != null){
        if(confirm('Você tem certeza que deseja apagar o item '+globalSelectedItem.name+' ?')){         
            globalCommunicator.resetParameters();
            globalCommunicator.addParameter('delete', globalTargetObject);
            globalCommunicator.addParameter('id', globalSelectedItem.id);
            globalCommunicator.sendRequest(doChangeHandler);
            
            clearFields();
        }
    }else alert('Deve haver um item selecionado');
}

function saveEditedItem(){
    globalValidationFailed = new Array();
    globalCommunicator.resetParameters();
    
    resolveGolsPartida();
    resolveCartoesPartida();
    resolveSubstituicoesPartida();
    resolveRelacionadosPartida();
    
    var communicator = new Communicator();
    
    var fields = new Array;
    fields['id_clube_casa'] = document.getElementById('time_casa_partida').value;
    fields['id_clube_visitante'] = document.getElementById('time_visitante_partida').value;
    fields['id_estadio'] = document.getElementById('estadio_partida').value;
    
    var horaPlanejadaDia = (document.getElementById('hora_planejada_dia_partida').value == '') ? null :  document.getElementById('hora_planejada_dia_partida').value;
    var horaPlanejadaMes = (document.getElementById('hora_planejada_mes_partida').value == '') ? null :  document.getElementById('hora_planejada_mes_partida').value;
    var horaPlanejadaHora = (document.getElementById('hora_planejada_hora_partida').value == '') ? null :  document.getElementById('hora_planejada_hora_partida').value;
    var horaPlanejadaMinuto = (document.getElementById('hora_planejada_minuto_partida').value == '') ? null :  document.getElementById('hora_planejada_minuto_partida').value;
    fields['hora_planejada'] = horaPlanejadaDia+'/'+horaPlanejadaMes+'/'+globalCurrentYear+' '+horaPlanejadaHora+':'+horaPlanejadaMinuto;
    
    var horaRealizadaDia = (document.getElementById('hora_realizada_dia_partida').value == '') ? null :  document.getElementById('hora_realizada_dia_partida').value;
    var horaRealizadaMes = (document.getElementById('hora_realizada_mes_partida').value == '') ? null :  document.getElementById('hora_realizada_mes_partida').value;
    var horaRealizadaHora = (document.getElementById('hora_realizada_hora_partida').value == '') ? null :  document.getElementById('hora_realizada_hora_partida').value;
    var horaRealizadaMinuto = (document.getElementById('hora_realizada_minuto_partida').value == '') ? null :  document.getElementById('hora_realizada_minuto_partida').value;
    fields['hora_realizada'] = horaRealizadaDia+'/'+horaRealizadaMes+'/'+globalCurrentYear+' '+horaRealizadaHora+':'+horaRealizadaMinuto;
    
    var publicoPagante = document.getElementById('publico_pagante_partida').value;
    var rendaTotal = document.getElementById('renda_total_partida').value;
    var duracaoT1 = document.getElementById('duracao_tempo1_partida').value;
    var duracaoT2 = document.getElementById('duracao_tempo2_partida').value;
    
    fields['publico_pagante'] = (publicoPagante == '' || publicoPagante == 'Não definido') ? null : publicoPagante;
    fields['renda_total'] = (rendaTotal == '' || rendaTotal == 'Não definido') ? null :  rendaTotal;
    fields['duracao_t1'] = (duracaoT1 == '' || duracaoT1 == 'Não definido') ? null :  duracaoT1;
    fields['duracao_t2'] = (duracaoT1 == '' || duracaoT1 == 'Não definido') ? null :  duracaoT2;
    
    var fieldAssigned;
    fieldAssigned = validateAssignFields(communicator, fields, globalSelectedItem);
    
    if(globalValidationFailed.length == 0){
        if(fieldAssigned){
            communicator.addParameter('update', globalTargetObject);
            communicator.addParameter('id', globalSelectedItem.id);
            communicator.sendRequest(doChangeHandler);
        }
    }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
}

function saveNewItem(){
    var communicator = new Communicator();
    
    var fields = new Array();    
    fields['rodada'] = document.getElementById('rodada_partida').value;
    fields['id_clube_casa'] = document.getElementById('time_casa_partida').value;
    fields['id_clube_visitante'] = document.getElementById('time_visitante_partida').value;
    fields['id_estadio'] = document.getElementById('estadio_partida').value;
    
    var horaPlanejadaDia = (document.getElementById('hora_planejada_dia_partida').value == '') ? null :  document.getElementById('hora_planejada_dia_partida').value;
    var horaPlanejadaMes = (document.getElementById('hora_planejada_mes_partida').value == '') ? null :  document.getElementById('hora_planejada_mes_partida').value;
    var horaPlanejadaHora = (document.getElementById('hora_planejada_hora_partida').value == '') ? null :  document.getElementById('hora_planejada_hora_partida').value;
    var horaPlanejadaMinuto = (document.getElementById('hora_planejada_minuto_partida').value == '') ? null :  document.getElementById('hora_planejada_minuto_partida').value;
    
   fields['hora_planejada'] = horaPlanejadaDia+'/'+horaPlanejadaMes+'/'+globalCurrentYear+' '+horaPlanejadaHora+':'+horaPlanejadaMinuto;
    
    var horaRealizadaDia = (document.getElementById('hora_realizada_dia_partida').value == '') ? null :  document.getElementById('hora_realizada_dia_partida').value;
    var horaRealizadaMes = (document.getElementById('hora_realizada_mes_partida').value == '') ? null :  document.getElementById('hora_realizada_mes_partida').value;
    var horaRealizadaHora = (document.getElementById('hora_realizada_hora_partida').value == '') ? null :  document.getElementById('hora_realizada_hora_partida').value;
    var horaRealizadaMinuto = (document.getElementById('hora_realizada_minuto_partida').value == '') ? null :  document.getElementById('hora_realizada_minuto_partida').value;
    
    fields['hora_realizada'] = horaRealizadaDia+'/'+horaRealizadaMes+'/'+globalCurrentYear+' '+horaRealizadaHora+':'+horaRealizadaMinuto;
    
    var publicoPagante = document.getElementById('publico_pagante_partida').value;
    var rendaTotal = document.getElementById('renda_total_partida').value;
    var duracaoT1 = document.getElementById('duracao_tempo1_partida').value;
    var duracaoT2 = document.getElementById('duracao_tempo2_partida').value;
    
    fields['publico_pagante'] = (publicoPagante == '' || publicoPagante == 'Não definido') ? null : publicoPagante;
    fields['renda_total'] = (rendaTotal == '' || rendaTotal == 'Não definido') ? null :  rendaTotal;
    fields['duracao_t1'] = (duracaoT1 == '' || duracaoT1 == 'Não definido') ? null :  duracaoT1;
    fields['duracao_t2'] = (duracaoT1 == '' || duracaoT1 == 'Não definido') ? null :  duracaoT2;
    
    validateAssignFields(communicator, fields);
    
    if(globalValidationFailed.length == 0){
        communicator.addParameter('insert', globalTargetObject);
        communicator.sendRequest(doChangeHandler);
    }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
}

function resolveGolsPartida(){
    var golsEl = document.getElementById('gol_partida');
    var golsList = golsEl.getElementsByClassName('list')[0];
    var golsListChildren = golsList.children;
    var golsListChildrenLen = golsListChildren.length;
    
    var communicator = new Communicator();
    var fieldAssigned;
    
    for(var i = 0; i < golsListChildrenLen; i++){
        var gol = golsListChildren[i];
        
        var fields = new Array();
        fields['id_clube'] = gol.getElementsByClassName('clube')[0].value;
        fields['id_jogador'] = gol.getElementsByClassName('jogador')[0].value;
        fields['minuto'] = gol.getElementsByClassName('minuto')[0].value;
        fields['tempo'] = gol.getElementsByClassName('tempo')[0].value;
        
        if(gol.getAttribute('DATA-ID')){ //Gol que veio do banco
            var golId = gol.getAttribute('DATA-ID');
            var golObj = globalGolsPerPartida[globalSelectedItem.getKey()]['gol_'+golId];
            
            fieldAssigned = validateAssignFields(communicator, fields, golObj);
            
            if(globalValidationFailed.length == 0){
                if(fieldAssigned){
                    communicator.addParameter('update', 'gol');
                    communicator.addParameter('id', golId);
                    communicator.sendRequest(doChangeHandler);
                }
            }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
        }
        else{ // Gol novo
            if(globalSelectedItem != null){ //Em partida selecionada
                fieldAssigned = validateAssignFields(communicator, fields);
                
                if(globalValidationFailed.length == 0){
                    if(fieldAssigned){
                        communicator.addParameter('insert', 'gol');
                        communicator.addParameter('id_partida', globalSelectedItem.id);
                        communicator.sendRequest(doChangeHandler);
                    }
                }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
            }else{ //Em partida criada
                alert('Primeiro, crie a partida. Depois, selecione-a para adicionar os gols');
            }            
        }
    }
}

function resolveRelacionadosPartida(){
    var relacionadosEl = document.getElementById('relacionado_partida');
    var relacionadosList = relacionadosEl.getElementsByClassName('list')[0];
    var relacionadosListChildren = relacionadosList.children;
    var relacionadosListChildrenLen = relacionadosListChildren.length;
    
    var communicator = new Communicator();
    var fieldAssigned;
    
    for(var i = 0; i < relacionadosListChildrenLen; i++){
        var relacionado = relacionadosListChildren[i];
        
        var fields = new Array();
        fields['titular'] = relacionado.getElementsByClassName('titular')[0].value;
        fields['id_jogador'] = relacionado.getElementsByClassName('jogador')[0].value;
        fields['numero_camisa'] = relacionado.getElementsByClassName('numero_camisa')[0].value;
        
        if(relacionado.getAttribute('DATA-ID')){ //Gol que veio do banco
            var relacionadoId = relacionado.getAttribute('DATA-ID');
            var relacionadoObj = globalRelacionadosPerPartida[globalSelectedItem.getKey()]['relacionado_'+relacionadoId];
            
            fieldAssigned = validateAssignFields(communicator, fields, relacionadoObj);
            
            if(globalValidationFailed.length == 0){
                if(fieldAssigned){
                    communicator.addParameter('update', 'jogador_relacionado_partida');
                    communicator.addParameter('id', relacionadoId);
                    communicator.sendRequest(doChangeHandler);
                }
            }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
        }
        else{ // Gol novo
            if(globalSelectedItem != null){ //Em partida selecionada
                fieldAssigned = validateAssignFields(communicator, fields);
                
                if(globalValidationFailed.length == 0){
                    if(fieldAssigned){
                        communicator.addParameter('insert', 'jogador_relacionado_partida');
                        communicator.addParameter('id_partida', globalSelectedItem.id);
                        communicator.sendRequest(doChangeHandler);
                    }
                }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
            }else{ //Em partida criada
                alert('Primeiro, crie a partida. Depois, selecione-a para adicionar os jogadores relacionados');
            }            
        }
    }
}

function resolveCartoesPartida(){
    var cartoesEl = document.getElementById('cartao_partida');
    var cartoesList = cartoesEl.getElementsByClassName('list')[0];
    var cartoesListChildren = cartoesList.children;
    var cartoesListChildrenLen = cartoesListChildren.length;
    
    var communicator = new Communicator();
    var fieldAssigned;
    
    for(var i = 0; i < cartoesListChildrenLen; i++){
        var cartao = cartoesListChildren[i];
        
        var fields = new Array();
        fields['tipo'] = cartao.getElementsByClassName('tipo')[0].value;
        fields['id_jogador'] = cartao.getElementsByClassName('jogador')[0].value;
        fields['minuto'] = cartao.getElementsByClassName('minuto')[0].value;
        fields['tempo'] = cartao.getElementsByClassName('tempo')[0].value;
        
        if(cartao.getAttribute('DATA-ID')){ //Gol que veio do banco
            var cartaoId = cartao.getAttribute('DATA-ID');
            var cartaoObj = globalCartoesPerPartida[globalSelectedItem.getKey()]['cartao_'+cartaoId];
            
            fieldAssigned = validateAssignFields(communicator, fields, cartaoObj);
            
            if(globalValidationFailed.length == 0){
                if(fieldAssigned){
                    communicator.addParameter('update', 'cartao');
                    communicator.addParameter('id', cartaoId);
                    communicator.sendRequest(doChangeHandler);
                }
            }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
        }
        else{ // Gol novo
            if(globalSelectedItem != null){ //Em partida selecionada
                fieldAssigned = validateAssignFields(communicator, fields);
                
                if(globalValidationFailed.length == 0){
                    if(fieldAssigned){
                        communicator.addParameter('insert', 'cartao');
                        communicator.addParameter('id_partida', globalSelectedItem.id);
                        communicator.sendRequest(doChangeHandler);
                    }
                }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
            }else{ //Em partida criada
                alert('Primeiro, crie a partida. Depois, selecione-a para adicionar os cartões');
            }            
        }
    }
}

function resolveSubstituicoesPartida(){
    var substituicoesEl = document.getElementById('substituicao_partida');
    var substituicoesList = substituicoesEl.getElementsByClassName('list')[0];
    var substituicoesListChildren = substituicoesList.children;
    var substituicoesListChildrenLen = substituicoesListChildren.length;
    
    var communicator = new Communicator();
    var fieldAssigned;
    
    for(var i = 0; i < substituicoesListChildrenLen; i++){
        var substituicao = substituicoesListChildren[i];
        
        var fields = new Array();
        fields['id_jogador_entrou'] = substituicao.getElementsByClassName('entrou')[0].value;
        fields['id_jogador_saiu'] = substituicao.getElementsByClassName('saiu')[0].value;
        fields['minuto'] = substituicao.getElementsByClassName('minuto')[0].value;
        fields['tempo'] = substituicao.getElementsByClassName('tempo')[0].value;
        if(substituicao.getAttribute('DATA-ID')){ //Gol que veio do banco
            var substituicaoId = substituicao.getAttribute('DATA-ID');
            var substituicaoObj = globalSubstituicoesPerPartida[globalSelectedItem.getKey()]['substituicao_'+substituicaoId];
            
            fieldAssigned = validateAssignFields(communicator, fields, substituicaoObj);
            
            if(globalValidationFailed.length == 0){
                if(fieldAssigned){
                    communicator.addParameter('update', 'substituicao');
                    communicator.addParameter('id', substituicaoId);
                    communicator.sendRequest(doChangeHandler);
                }
            }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
        }
        else{
            if(globalSelectedItem != null){ //Em partida selecionada
                fieldAssigned = validateAssignFields(communicator, fields);
                
                if(globalValidationFailed.length == 0){
                    if(fieldAssigned){
                        communicator.addParameter('insert', 'substituicao');
                        communicator.addParameter('id_partida', globalSelectedItem.id);
                        communicator.sendRequest(doChangeHandler);
                    }
                }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
            }else{ //Em partida criada
                alert('Primeiro, crie a partida. Depois, selecione-a para adicionar os cartões');
            }            
        }
    }
}

function validateFields(field, value){
    var feedback = false;
    
    if(field == 'tempo'){
        if(!validateTempo(value)) feedback = 'Tempo';
    }
    else if(field == 'minuto'){
        if(!validateMinuto(value)) feedback = 'Minuto';
    }
    else if(field == 'tipo'){
        if(!validateTipoCartao(value)) feedback = 'Tipo cartão';
    }
    else if(field == 'id_clube' || field == 'id_clube_casa' || field == 'id_clube_visitante'){
        if(!validateClube(value)){
            if(field == 'id_clube') feedback = 'Clube';
            else if(field == 'id_clube_casa') feedback = 'Clube Casa';
            else if(field == 'id_clube_visitante') feedback = 'Clube Visitante';
        }
    }
    else if(field == 'id_jogador' || field == 'id_jogador_saiu' || field == 'id_jogador_entrou'){
        if(!validateJogador(value)){
            if(field == 'id_jogador') feedback = 'Jogador';
            else if(field == 'id_jogador_entrou') feedback = 'Jogador que entrou';
            else if(field == 'id_jogador_saiu') feedback = 'Jogador que saiu';
        }
    }
    else if(field == 'id_estadio'){
        if(!validateEstadio(value)) feedback = 'Estadio';
    }
    else if(field == 'hora_realizada' || field == 'hora_planejada'){
        if(!validateNullDate(value)){
            if(field == 'hora_planejada') feedback = 'Hora planejada';
            else if(field == 'hora_realizada') feedback = 'Hora realizada';
        }
    }
    else if(field == 'publico_pagante'){
        if(!validateNumericNull(value)) feedback = 'Publico pagante';
    }
    else if(field == 'renda_total'){
        if(!validateNumericNull(value)) feedback = 'Renda total';
    }
    else if(field == 'duracao_t1' || field == 'duracao_t2'){
        if(!validateNumericNull(value)){
            if(field == 'duracao_t1') feedback = 'Duração 1ª tempo';
            if(field == 'duracao_t2') feedback = 'Duração 2ª tempo';
        }
    }
    else if(field == 'rodada'){
        if(!isNumeric(value)) feedback = 'Rodada';
    }
    
    return feedback;
}

//Validações
function validateTipoCartao(value){
    if(value != 0 && value != 1) return false;
    return true;
}

function validateNumericNull(value){
    if(value != null)
        if(!isNumeric(value)) return false;
    return true;
}

function validateTempo(value){//Só funciona para 1º e 2º
    if(value != null){
        if(value != 1 && value != 2) return false;
    }
        
    return true;
}

function validateEstadio(value){//Só funciona para 1º e 2º
    if(value != null) 
        if(value != 1 && value != 2) return false;
    return true;
}

function validateMinuto(value){
    if(value != null) 
        if((value < 0 || value > 59)) return false;
    return true;
}

function validateHora(value){
    if(value != null)
        if(value < 0 || value > 23) return false;
    return true;
}

function validateClube(value){
    if(!isNumeric(value)) return false;
    return true;
}

function validateJogador(value){
    if(!isNumeric(value)) return false;
    return true;
}


//fim validação

function validateTimeCasaTimeVisitante(timeCasa, timeVisitante){
    if(timeCasa == timeVisitante) return false;
    if(!isNumeric(timeCasa) || !isNumeric(timeVisitante)) return false;
    
    return true;
}

function focusFirstField(){
    document.getElementById('fields').getElementsByTagName('input')[0].focus();
}

function createRelatedBoxTypeItem(type){
    if(type == 'gol') return createRelatedBoxItemGol();
    else if(type == 'cartao') return createRelatedBoxItemCartao();
    else if(type == 'substituicao') return createRelatedBoxItemSubstituicao();
    else if(type == 'relacionado') return createRelatedBoxItemRelacionado();
    else return false;
}

function createRelatedBoxItemRelacionado(obj){
    var item = document.createElement('DIV');
    item.className = 'item';
    
    var jogadores = (globalSelectedItem == null) ? globalJogadores : filterJogadoresByClube([globalSelectedItem.id_clube_casa, globalSelectedItem.id_clube_visitante]);
    
    var jogadorCombo = createComboBox(jogadores, 'Selecione o jogador');
    jogadorCombo.className = 'jogador';
    
    var camisa = document.createElement('INPUT');
    camisa.className = 'numero_camisa';
    
    var titular = document.createElement('INPUT');
    titular.className = 'titular';
    if(obj){
        selectComboItem(jogadorCombo, obj.id_jogador);
        camisa.value = obj.numero_camisa;
        titular.value = obj.titular;
        item.setAttribute('DATA-ID', obj.id);
    }
    
    item.appendChild(jogadorCombo);
    item.appendChild(camisa);
    item.appendChild(titular);
    
    return item;
}

function createRelatedBoxItemGol(obj){
    var item = document.createElement('DIV');
    item.className = 'item';
    
    var clubes = (globalSelectedItem == null) ? globalClubes : filterClubesById([globalSelectedItem.id_clube_casa, globalSelectedItem.id_clube_visitante]);
    var jogadores = (globalSelectedItem == null) ? globalJogadores : filterJogadoresByClube([globalSelectedItem.id_clube_casa, globalSelectedItem.id_clube_visitante]);
    
    var clubeCombo = createComboBox(clubes, 'Selecione o clube');
    clubeCombo.className = 'clube';
    
    var jogadorCombo = createComboBox(jogadores, 'Selecione o jogador');
    jogadorCombo.className = 'jogador';
    
    var minutoInput = document.createElement('INPUT');
    minutoInput.className = 'minuto';
    
    var tempoInput = document.createElement('INPUT');
    tempoInput.className = 'tempo';
    
    if(obj){
        selectComboItem(clubeCombo, obj.id_clube);
        selectComboItem(jogadorCombo, obj.id_jogador);
        minutoInput.value = obj.minuto;
        tempoInput.value = obj.tempo;
        item.setAttribute('DATA-ID', obj.id);
    }
    
    item.appendChild(clubeCombo);
    item.appendChild(jogadorCombo);
    item.appendChild(minutoInput);
    item.appendChild(tempoInput);
    
    return item;
}

function createRelatedBoxItemCartao(obj){
    var item = document.createElement('DIV');
    item.className = 'item';

    var jogadores = (globalSelectedItem == null) ? globalJogadores : filterJogadoresByClube([globalSelectedItem.id_clube_casa, globalSelectedItem.id_clube_visitante]);
    var jogadorCombo = createComboBox(jogadores, 'Selecione o jogador');
    jogadorCombo.className = 'jogador';
    
    var tipoCombo = document.createElement('SELECT');
    tipoCombo.className = 'tipo';
    //cartão amarelo
    var amereloOption = document.createElement('OPTION');
    amereloOption.appendChild(document.createTextNode('Amarelo'));
    amereloOption.value = 0;
    //cartão vermelho
    var vermelhoOption = document.createElement('OPTION');
    vermelhoOption.appendChild(document.createTextNode('Vermelho'));
    vermelhoOption.value = 1;
    tipoCombo.appendChild(amereloOption);
    tipoCombo.appendChild(vermelhoOption);
    
    var minutoInput = document.createElement('INPUT');
    minutoInput.className = 'minuto';
    
    var tempoInput = document.createElement('INPUT');
    tempoInput.className = 'tempo';
    
    if(obj){
        selectComboItem(jogadorCombo, obj.id_jogador);
        selectComboItem(tipoCombo, obj.tipo);
        minutoInput.value = obj.minuto;
        tempoInput.value = obj.tempo;
        item.setAttribute('DATA-ID', obj.id);
    }
    
    item.appendChild(jogadorCombo);
    item.appendChild(tipoCombo);
    item.appendChild(minutoInput);
    item.appendChild(tempoInput);
    
    return item;
}

function createRelatedBoxItemSubstituicao(obj){
    var item = document.createElement('DIV');
    item.className = 'item';
    
    var jogadores = (globalSelectedItem == null) ? globalJogadores : filterJogadoresByClube([globalSelectedItem.id_clube_casa, globalSelectedItem.id_clube_visitante]);
    
    var saiuCombo = createComboBox(jogadores, 'Selecione o jogador');
    saiuCombo.className = 'saiu';
    
    var entrouCombo = createComboBox(jogadores, 'Selecione o jogador');
    entrouCombo.className = 'entrou';
    
    var minutoInput = document.createElement('INPUT');
    minutoInput.className = 'minuto';
    
    var tempoInput = document.createElement('INPUT');
    tempoInput.className = 'tempo';
    
    if(obj){
        selectComboItem(saiuCombo, obj.id_jogador_saiu);
        selectComboItem(entrouCombo, obj.id_jogador_entrou);
        minutoInput.value = obj.minuto;
        tempoInput.value = obj.tempo;
        item.setAttribute('DATA-ID', obj.id);
    }
    
    item.appendChild(entrouCombo);
    item.appendChild(saiuCombo);
    item.appendChild(minutoInput);
    item.appendChild(tempoInput);
    
    return item;
}

function changeDatetimeCombos(){
    var horaPlanejadaDia = document.getElementById('hora_planejada_dia_partida');
    var horaPlanejadaMes = document.getElementById('hora_planejada_mes_partida');
    var horaPlanejadaHora = document.getElementById('hora_planejada_hora_partida');
    var horaPlanejadaMinuto = document.getElementById('hora_planejada_minuto_partida');
    
    var comboDia = createComboDays();
    comboDia.id = 'hora_planejada_dia_partida';
    horaPlanejadaDia.parentNode.replaceChild(comboDia, horaPlanejadaDia);
    
    var comboMes = createComboMonths();
    comboMes.id = 'hora_planejada_mes_partida';
    horaPlanejadaMes.parentNode.replaceChild(comboMes, horaPlanejadaMes);
    
    var comboHora = createComboHours();
    comboHora.id = 'hora_planejada_hora_partida';
    horaPlanejadaHora.parentNode.replaceChild(comboHora, horaPlanejadaHora);
    
    var comboMinuto = createComboMinutes();
    comboMinuto.id = 'hora_planejada_minuto_partida';
    horaPlanejadaMinuto.parentNode.replaceChild(comboMinuto, horaPlanejadaMinuto);
    
    
    horaPlanejadaDia = document.getElementById('hora_realizada_dia_partida');
    horaPlanejadaMes = document.getElementById('hora_realizada_mes_partida');
    horaPlanejadaHora = document.getElementById('hora_realizada_hora_partida');
    horaPlanejadaMinuto = document.getElementById('hora_realizada_minuto_partida');
    
    comboDia = createComboDays();
    comboDia.id = 'hora_realizada_dia_partida';
    horaPlanejadaDia.parentNode.replaceChild(comboDia, horaPlanejadaDia);
    
    comboMes = createComboMonths();
    comboMes.id = 'hora_realizada_mes_partida';
    horaPlanejadaMes.parentNode.replaceChild(comboMes, horaPlanejadaMes);
    
    comboHora = createComboHours();
    comboHora.id = 'hora_realizada_hora_partida';
    horaPlanejadaHora.parentNode.replaceChild(comboHora, horaPlanejadaHora);
    
    comboMinuto = createComboMinutes();
    comboMinuto.id = 'hora_realizada_minuto_partida';
    horaPlanejadaMinuto.parentNode.replaceChild(comboMinuto, horaPlanejadaMinuto);
}

function clearSpecificElements(){
    clearRelatedBoxes();
}